const fs = require('fs');
const path = require('path');

// 加载 JSON 映射表
const docMap = require('./docMap.json');

// 用于记录每个一级目录的信息（group）
const groups = {};
let groupOrderCounter = 0;

// 收集所有的一级目录并生成 group 信息
Object.entries(docMap).forEach(([filePath, title]) => {
  if (!filePath.endsWith('.md')) return; // 忽略目录项本身

  const parts = filePath.split('/');
  const firstLevelDir = parts[1]; // 如 low-code-guide

  if (!groups[firstLevelDir]) {
    const dirKey = `docs/${firstLevelDir}/`;
    const chineseTitle = typeof docMap[dirKey] === 'string' ? docMap[dirKey] : firstLevelDir;

    groups[firstLevelDir] = {
      title: chineseTitle,
      path: `/${firstLevelDir}`,
      order: groupOrderCounter++,
    };
  }
});

// 记录已使用的文件路径，避免重复
const usedFilenames = {};

// 开始生成 Markdown 文件
Object.entries(docMap).forEach(([filePath, title]) => {
  if (!filePath.endsWith('.md')) return;

  const parts = filePath.split('/');
  const firstLevelDir = parts[1];
  let fileName = parts[parts.length - 1];

  // 构建输出路径：docs/first-level-dir/xxx.md
  const targetDir = path.join(__dirname, 'docs', firstLevelDir);
  let targetPath = path.join(targetDir, fileName);

  // 如果文件名重复，就加上数字后缀避免覆盖
  let counter = 1;
  while (usedFilenames[targetPath]) {
    fileName = `${fileName.replace(/\.md$/, '')}-${counter}.md`;
    targetPath = path.join(targetDir, fileName);
    counter++;
  }
  usedFilenames[targetPath] = true;

  // 创建目录
  fs.mkdirSync(targetDir, { recursive: true });

  // 获取当前 .md 文件的父级目录路径（不包含文件名）
  const parentDirPath = filePath.replace(/^docs\//, '').replace(/\/[^/]+\.md$/, '');

  // 构造对应中文标题，优先取 docMap 中的描述，否则用英文路径名
  let groupTitle = docMap[`docs/${parentDirPath}/`] || parentDirPath.split('/').pop();

  // 构造 group.path：/base-components/data-source/table
  const fullPath = `/${parentDirPath}`;

  // 构造 group.order（这里可以按字母排序或手动设置，这里先默认为 0）
  const groupOrder = 0;

  // 计算当前文件在当前组中的顺序
  const groupFiles = Object.keys(docMap)
    .filter(k => k.startsWith(`docs/${firstLevelDir}/`) && k.endsWith('.md'));
  const fileOrder = groupFiles.indexOf(filePath);

  // 写入 FrontMatter + 内容
  const content = `---
title: ${title}
order: ${fileOrder}
group:
  title: ${groupTitle}
  path: ${fullPath}
  order: ${groupOrder}
---
  
${title} 文档内容`;
  fs.writeFileSync(targetPath, content, 'utf-8');
  console.log(`✅ 已生成：${targetPath}`);
});